import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
 * Het hoofdmenu
 * @author Jeroen
 *
 */
public class MenuGUI extends JFrame implements ActionListener{

	private static final long serialVersionUID = 1L;
	private int pWidth = 600, pHeight = 600;
	private Bank bank;
	private Rekening rekening;
	private boolean medewerker = false;
	
	// Labels
	private JLabel naam, rekeningNr, saldo;
	
	// De buttons
	private JButton storten, opnemen,overboeken,stoppen,overzicht;
	private JButton klantgegevensWijzigen, nieuweKlant, nieuweRekening;
	private JButton nieuwRekeningtype, nieuweMedewerker, wijzigRekening;
	
	/**
	 * Constructor voor de Medewerker
	 * @param b
	 */
	public MenuGUI(Bank b){
		this.bank = b;
		medewerker = true;
		Container q = getContentPane();
		q.setLayout(new FlowLayout());
		JPanel c = new JPanel();
		c.setLayout(new GridLayout(10,1));
		
		stoppen = new JButton("Stoppen");
		klantgegevensWijzigen = new JButton("Klantgegevens wijzigen");
		nieuweKlant = new JButton("Nieuwe klant aanmaken");
		nieuweRekening = new JButton("Nieuwe rekening aanmaken");
		nieuwRekeningtype = new JButton("Nieuw rekeningtype");
		nieuweMedewerker = new JButton("Nieuwe medewerker aanmaken");
		overzicht = new JButton("Transactieoverzicht");
		wijzigRekening = new JButton("Wijzig Rekening");
		
		c.add(nieuweKlant);
		c.add(nieuweRekening);
		c.add(nieuwRekeningtype);
		c.add(klantgegevensWijzigen);
		c.add(wijzigRekening);
		c.add(nieuweMedewerker);
		c.add(stoppen);
		c.add(overzicht);
		q.add(c);
				
		stoppen.addActionListener(this);
		klantgegevensWijzigen.addActionListener(this);
		nieuweKlant.addActionListener(this);
		nieuweRekening.addActionListener(this);
		nieuwRekeningtype.addActionListener(this);
		nieuweMedewerker.addActionListener(this);
		overzicht.addActionListener(this);
		wijzigRekening.addActionListener(this);
		
		setSize(pWidth, pHeight);
		setTitle("Hoofdmenu");
	    setVisible(true);
	    setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
	
	/**
	 * Constructor voor de Klant
	 * @param b
	 * @param r
	 */
	public MenuGUI(Bank b, Rekening r){
		this.bank = b;
		this.rekening = r;
		boolean magOpnemen = rekening.getRekeningType().getMagOpnemen();
		
		Container c = getContentPane();
		c.setLayout(new FlowLayout());
		
		// Panel voor buttons
		JPanel p = new JPanel(); 
		p.setLayout(new GridLayout(10,1));
		c.add(p);
		
		// Panel voor gegevens
		JPanel g = new JPanel();
		g.setLayout(new GridLayout(3,3));
		
		storten = new JButton("Storten");
		if(magOpnemen)
			opnemen = new JButton("Opnemen");
		overboeken = new JButton("Overboeken");
		stoppen = new JButton("Stoppen");
		overzicht = new JButton("Transactieoverzicht");
		naam = new JLabel(r.getRekeningHouder().getNaam());
		rekeningNr = new JLabel(r.getRekNr()+"");
		saldo = new JLabel(r.getSaldo()+"");
		
		g.add(new JLabel("Naam:"));
		g.add(naam);
		g.add(new JLabel("Rekeningnummer:"));
		g.add(rekeningNr);
		g.add(new JLabel("Saldo:"));
		g.add(saldo);
		p.add(g);
		p.add(storten);
		if(magOpnemen)
			p.add(opnemen);
		p.add(overboeken);
		p.add(stoppen);
		p.add(overzicht);
				
		storten.addActionListener(this);
		if(magOpnemen)
			opnemen.addActionListener(this);
		overboeken.addActionListener(this);
		stoppen.addActionListener(this);
		overzicht.addActionListener(this);
				
		setSize(pWidth, pHeight);
		setTitle("Bankapplicatie");
	    setVisible(true);
	    setDefaultCloseOperation(EXIT_ON_CLOSE);
	}

	public void actionPerformed(ActionEvent e){
		if (e.getSource() == storten){
			new StortenGUI(rekening);
		}else if (e.getSource() == opnemen){
			new OpnemenGUI(rekening);
		}else if (e.getSource() == overboeken){
			new OverboekenGUI(rekening, bank);
		}else if (e.getSource() == stoppen){
			try{
				bank.save();
			}catch(IOException ioe){
				System.out.println(ioe);
			}
			System.exit(0);
		}else if (e.getSource() == overzicht){
			if (medewerker){
				new OverzichtGUI(bank);
			}else{
				new OverzichtGUI(rekening);
			}
		}else if (e.getSource() == klantgegevensWijzigen){
			new KlantWijzigenGUI(bank);
		}else if (e.getSource() == nieuweKlant){
			new KlantToevoegenGUI(bank);
		}else if (e.getSource() == nieuweRekening){
			new KlantSelectieGUI(bank);
		}else if (e.getSource() == nieuwRekeningtype){
			new RekeningtypeGUI(bank);
		}else if (e.getSource() == nieuweMedewerker){
			new BankMedewerkerToevoegenGUI(bank);
		}else if (e.getSource() == wijzigRekening){
			new RekeningSelectieGUI(bank);
		}
	}
}